package entretenimiento.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import entretenimiento.excepcion.DAOExcepcion;
import entretenimiento.modelo.Servicio;
import entretenimiento.modelo.Usuario;
import entretenimiento.util.ConexionBD;

public class UsuarioDAO extends BaseDAO {
	private static int CodigoUsu = 0;
	
	public Usuario validar(String Usuario , String clave ) throws DAOExcepcion {
				
		String query = "select u.CoUsuario,concat(r.NoNombres,r.NoApePaterno , r.NoApeMaterno) as dato, CoTipoUsuario,NoEmail,NoContrasena from usuario u " +
				"left join responsable_familia r on u.CoUsuario = r.CoUsuario " +
				"where NoEmail = ? " +
				"and NoContrasena = ? ";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		Usuario entidad = new Usuario();
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, Usuario);
			stmt.setString(2, clave );
						
			rs = stmt.executeQuery();
			/*if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}*/
			// Obtener el ultimo id
			/*int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();*/
			if (rs.next()) {				
				entidad.setCodigo(rs.getInt("CoUsuario"));
				entidad.setTipousuario(rs.getInt("CoTipoUsuario"));
				entidad.setEmail(rs.getString("NoEmail"));
				entidad.setContrasena(rs.getString("NoContrasena"));
				entidad.setLogeado(rs.getString("dato"));
			}			

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return entidad;
	}
	
	
	public Usuario insertar(Usuario vo) throws DAOExcepcion {
		String query = "insert into usuario(CoUsuario, CoTipoUsuario, NoEmail, FlEstado, " +
					   "NoContrasena) values (?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getCodigo());
			stmt.setInt(2, vo.getTipousuario());
			stmt.setString(3, vo.getEmail());
			stmt.setInt(4, vo.getEstado());
			stmt.setString(5, vo.getContrasena());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			vo.setCodigo(id);
			setCodigoUsu(vo.getCodigo());
			
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public Usuario actualizar_responsable(Usuario vo) throws DAOExcepcion {
		String query = "update usuario set NoEmail=?, NoContrasena=? where CoUsuario=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getEmail());
			stmt.setString(2, vo.getContrasena());
			stmt.setInt(3, vo.getCodigo());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
			
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}	
	
	public void eliminar_usuario(int codigo) throws DAOExcepcion {
		String query = "update usuario set FlEstado = 1 where CoUsuario=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, codigo);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
			
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public static int getCodigoUsu() {
		return CodigoUsu;
	}


	public static void setCodigoUsu(int codigoUsu) {
		CodigoUsu = codigoUsu;
	}
	

}
